package JVM.第01篇_字节码篇;

import java.lang.annotation.ElementType;

/**
 * @see java学习.第17章_反射机制.D_那些可以被class使用
 */
public class B1_那些可以被class使用 {
    public static void main(String[] args) {
        /**
         * 哪些类型可以有Class对象?
         * (1) class:外部类，成员(成员内部类，静态内部类)，局部内部类，匿名内部类
         * (2) interface: 接口
         * (3) []: 数组.
         * (4) enum: 枚举.
         * (5) annotation: 注解@interface
         * (6)primitive type:基本数据类型
         * (7) void
         */
        Class<Object> c1 = Object.class;//class java.lang.Object
        Class<Comparable> c2 = Comparable.class;//interface java.lang.Comparable
        Class<String[]> c3 = String[].class;//class [L java.lang.String;
        Class<int[][]> c4 = int[][].class;//class [[I
        Class<ElementType> c5 = ElementType.class;//class java.lang.annotation.ElementType
        Class<Override> c6 = Override.class;//interface java.lang.Override
        Class<Integer> c7 = int.class;//int
        Class<Void> c8 = void.class;//void
        System.out.println(c7);
        Class<Class> c9 = Class.class;//class java.lang.Class

        int[] a = new int[10];
        int[] b = new int[100];
        Class<? extends int[]> c10 = a.getClass();
        Class<? extends int[]> c11 = b.getClass();
        // 只要数组的元素类型与维度一样，就是同一个Class
        System.out.println(c10 == c11);//true
    }
}
